package com.qf.scms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qf.scms.common.PageVO;
import com.qf.scms.dao.CourseDao;
import com.qf.scms.entity.Course;
import com.qf.scms.entity.CourseExcel;
import com.qf.scms.param.CourseParam;
import com.qf.scms.service.CourseService;
import com.qf.scms.vo.CourseVO;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;

/**
 * (Course)表服务实现类
 *
 * @author makejava
 * @since 2025-06-25 21:17:51
 */
@Service("courseService")
public class CourseServiceImpl implements CourseService {
    @Resource
    private CourseDao courseDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public Course queryById(Integer id) {
        return this.courseDao.queryById(id);
    }

    /**
     * 分页查询
     *
     * @param courseParam 分页参数
     * @return 列表
     */
    @Override
    public PageVO<CourseVO> queryByPage(CourseParam courseParam) {
        // 第一步：创建分页对象
        Page<CourseVO> page = new Page<>(courseParam.getPageNum(), courseParam.getPageSize());
        // 第二步:调用dao查询数据，这里用到了模糊查询
        Page<CourseVO> list = courseDao.selectAllCourseByPage(page, new QueryWrapper<>(), courseParam);

        // 第三步:封装数据
        PageVO<CourseVO> pageVO = new PageVO<>();
        pageVO.setTotal(list.getTotal());
        pageVO.setDataList(list.getRecords());
        // 第四步：返回结果
        return pageVO;
    }

    /**
     * 新增数据
     *
     * @param course 实例对象
     * @return 实例对象
     */
    @Override
    public Integer insert(Course course) {
        return this.courseDao.insert(course);
    }

    /**
     * 修改数据
     *
     * @param course 实例对象
     * @return 实例对象
     */
    @Override
    public Integer update(Course course) {
        return this.courseDao.update(course);
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return this.courseDao.deleteById(id) > 0;
    }

    /**
     * 批量删除数据
     *
     * @param ids 批量删除的id
     * @return 是否成功
     */
    @Override
    public boolean deleteBatch(List<Integer> ids) {
        // 根据id批量删除
        return this.courseDao.deleteBatchIds(ids);
    }

    /**
     * 分批量批量导入课程数据
     * @param cachedDataList 待导入的缓存课程数据
     * @return 是否导入成功，>0表示插入成功，<=0表示插入失败
     */
    @Override
    public Integer insertBatchCourse(List<CourseExcel> cachedDataList) {
        return this.courseDao.insertBatchCourse(cachedDataList);
    }

    /**
     * 查询所有课程数据
     * @return 课程数据列表
     */
    @Override
    public List<CourseVO> selectAllCourseVO() {
        return courseDao.selectAllCourseVO();
    }

}
